package leetcode.leetcode_hot100;

import java.util.Stack;

/**
 * @ClassName T0155
 * @Description 最小栈
 * @Author Fanxc
 * @DATE 2021/6/19 10:54
 * @Version 1.0
 */
public class T0155 {
    //使用两个栈来构建最小栈
    //一个栈存储全部数据
    //另一个栈，递减存储数据，并维护这个递减，保证栈顶为当前A栈中的最小值
    //这里有一个问题就是最小值的不只一个，当一个最小值pop之后，最小值还存在
    //也即B栈的递减为>=,出栈时不是==判断，而是equals函数
    class MinStack {
        Stack<Integer> A,B;
        /** initialize your data structure here. */
        public MinStack() {
            A=new Stack<>();
            B=new Stack<>();
        }

        public void push(int val) {
            A.add(val);
            if(B.isEmpty()||B.peek()>=val){
                B.add(val);
            }
        }

        public void pop() {
            if (A.pop().equals(B.peek())){
                B.pop();
            }
        }

        public int top() {
            return A.peek();
        }

        public int getMin() {
            return B.peek();
        }
    }
}
